package cn.damai.order.mapper;

import cn.damai.model.SchedulerSeat;
import cn.damai.model.SchedulerSeatPrice;
import cn.damai.model.Order;
import cn.damai.order.model.OrderDTO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 订单sql映射
 */
public interface OrderMapper {
    /**
     * 测试用
     * @return
     */
    List<Order> queryAll();

    /**
     * 订单确认
     * @param orderDTO
     */
    void confirmOrder(OrderDTO orderDTO);

    /**
     * 获取该场次价格
     * @param schedulerId 场次ID
     * @param areaLevel 区域值
     * @return
     */
    SchedulerSeatPrice schedulerPrice(@Param("schedulerId") Long schedulerId, @Param("areaLevel") Integer areaLevel);

    /**
     * 映射订单信息
     * @param userId 用户id
     * @return
     */
    List<OrderDTO> orderListByUserId(@Param("userId") Long userId);

    /**
     * 映射订单详情
     * @param orderNo 订单编号
     * @return
     */
    OrderDTO  orderDetailByOrderNo(@Param("orderNo") String orderNo);

    /**
     * 映射该场次所有座位信息
     * @param schedulerId 场次ID
     * @param areaLevel 区域值
     * @return
     */
    List<SchedulerSeat> listSeatBySchedulerAndAreaLevel(@Param("schedulerId") Long schedulerId, @Param("areaLevel") Integer areaLevel);

    /**
     * 映射活动详细信息
     * @param order 订单类
     * @param areaLevel 区域值
     * @return
     */
    OrderDTO listItemInfo(@Param("order") Order order, @Param("areaLevel") Integer areaLevel);

    /**
     * 获取订单信息
     * @param orderNo 订单编号
     * @return
     */
    Order queryOrderByOrderNo(@Param("orderNo") String orderNo);

    /**
     * 关联下单的联系人信息
     * @param orderDTO 订单DTO类
     */
    void addOrderLinkUser(OrderDTO orderDTO);

    /**
     * 预售,锁定座位信息
     * @param orderDTO 订单DTO类
     */
    void updateSchedulerSeat(OrderDTO orderDTO);

    /**
     * 支付完成,更新订单
     * @param order 订单类
     */
    void updateOrder(Order order);

    /**
     * 支付完成,更新座位状态
     * @param order 订单类
     */
    void saledSchedulerSeat(Order order);

    /**
     * 添加支付关联信息
     * @param order 订单类
     */
    void addTrade(Order order);

    /**
     * 超时,更新订单
     * @param orderNo 订单编号
     */
    void updateOrderType(@Param("orderNo") String orderNo);

    /**
     * 超时,更新订单
     * @param orderNo 订单编号
     */
    void updateSchedulerSeatStatus(@Param("orderNo") String orderNo);
}
